/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package ImprimirPolenta;

import Logica.controladores.ControladorCuotas;
import Logica.cuenta.DataCuota;
import Utilidades.Utils;
import com.lowagie.text.Chunk;
import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.FontFactory;
import com.lowagie.text.Image;
import com.lowagie.text.PageSize;
import com.lowagie.text.Paragraph;
import com.lowagie.text.Rectangle;
import com.lowagie.text.pdf.PdfPCell;
import com.lowagie.text.pdf.PdfPTable;
import com.lowagie.text.pdf.PdfWriter;
import java.awt.Font;
import java.awt.print.PageFormat;
import java.awt.print.Paper;
import java.awt.print.PrinterJob;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.List;
import org.jpedal.PdfDecoder;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;

/**
 *
 * @author maxi
 */
public class Imprimir2 {
    static Imprimir2 _instancia = null;
    
     public static Imprimir2 getInstance(){
        if(_instancia == null) _instancia = new Imprimir2();
        return _instancia;
    }
     public static String archivo="D:archivo.pdf";
     
     public void imprimirFacturas(List<DataCuota> lista) throws DocumentException, IOException{
         Document documento = new Document(PageSize.LETTER, 80, 80, 75, 75);
 System.out.println(archivo);
    //writer es declarado como el método utilizado para escribir en el archivo
    PdfWriter writer = null;
            String date = "temp2"+GregorianCalendar.getInstance().getTime().toLocaleString()+".pdf";
            date = date.replace(":", "_");
            date = date.replace("/", "_");
            date = date.replace("\\", "_");
            date = "D:/"+date;
 
    try {      
      //Obtenemos la instancia del archivo a utilizar
      writer = PdfWriter.getInstance(documento, new FileOutputStream(date));
    } catch (FileNotFoundException|DocumentException ex) {
      ex.getMessage();
    }
     //Agregamos un titulo al archivo
    documento.addTitle("Enano chupa pija");
 
    //Agregamos el autor del archivo
    documento.addAuthor("Maxis");
 
    //Abrimos el documento para edición
                documento.open();
            Calendar fecha = new GregorianCalendar();
            Image foto = Image.getInstance("src\\imgs\\imagen.jpg");
            foto.scaleToFit(75, 50);
            foto.setTransparency(new int[]{ 0xF9 ,  0xFC });
                PdfPTable table = new PdfPTable(2);
                table.setWidths(new float[] {400f , 100f});
            for(DataCuota dc :lista){   
                
                PdfPCell cell = new PdfPCell();
                PdfPCell cell2 = new PdfPCell();
                cell.setBorder(Rectangle.NO_BORDER);
                cell2.setBorder(Rectangle.NO_BORDER);
                documento.add(new Chunk(""));
                
                Chunk str = new Chunk("Recibi de "+dc.getUsuario().getNombre()+" "+dc.getUsuario().getApellido()+" el dia "+Utils.dateSql(fecha));
                Chunk str2 = new Chunk("La cantidad de $50 (cincuenta pesos uruguayos)");
                Chunk str3 = new Chunk("Por la cuota del mes "+ControladorCuotas.getInstance().retornarMes(dc.getMes())+" del año "+dc.getAnio());
                Chunk str4 = new Chunk("Firma:_________________________");
                cell.addElement(new Chunk("Asociacion Sanducera de Jubilados y Pensionistas"));
                cell.addElement(new Paragraph());
                cell.addElement(str);
                cell.addElement(new Paragraph());
                cell.addElement(str2);
                cell.addElement(new Paragraph());
                cell.addElement(str3);
                cell.addElement(new Paragraph());
                cell.addElement(str4);
                foto.setAlignment(Chunk.ALIGN_CENTER);
                cell2.addElement(foto);
                table.addCell(cell);
                table.addCell(cell2);
                cell = new PdfPCell();
                cell2 = new PdfPCell();
                cell.addElement(new Chunk("                                "));
                cell2.addElement(new Chunk("           "));
                cell.setBorder(Rectangle.NO_BORDER);
                cell2.setBorder(Rectangle.NO_BORDER);
                table.addCell(cell);
                table.addCell(cell2);
                
                cell = new PdfPCell();
                cell2 = new PdfPCell();
                cell.setBorder(Rectangle.NO_BORDER);
                cell2.setBorder(Rectangle.NO_BORDER);
                documento.add(new Chunk(""));
                
                str = new Chunk("Recibi de "+dc.getUsuario().getNombre()+" "+dc.getUsuario().getApellido()+" el dia "+Utils.dateSql(fecha));
                str2 = new Chunk("La cantidad de $50 (cincuenta pesos uruguayos)");
                str3 = new Chunk("Por la cuota del mes "+ControladorCuotas.getInstance().retornarMes(dc.getMes())+" del año "+dc.getAnio());
                cell.addElement(new Chunk("Asociacion Sanducera de Jubilados y Pensionistas"));
                cell.addElement(new Paragraph());
                cell.addElement(str);
                cell.addElement(new Paragraph());
                cell.addElement(str2);
                cell.addElement(new Paragraph());
                cell.addElement(str3);
                foto.setAlignment(Chunk.ALIGN_CENTER);
                cell2.addElement(foto);
                table.addCell(cell);
                table.addCell(cell2);
                cell = new PdfPCell();
                cell2 = new PdfPCell();
                cell.addElement(new Chunk("                                "));
                cell2.addElement(new Chunk("           "));
                cell.setBorder(Rectangle.NO_BORDER);
                cell2.setBorder(Rectangle.NO_BORDER);
                table.addCell(cell);
                table.addCell(cell2);
            }
                documento.add(table);
 
//    try{
//      //Obtenemos la instancia de la imagen
//      Image imagen = Image.getInstance("src\\imgs\\imagen.jpg");
//      //Alineamos la imagen al centro
//      imagen.setAlignment(Image.ALIGN_CENTER);
//      //Escalamos la imagen al 50%
//      imagen.scalePercent(50);
//      //Agregamos la imagen al documento
//      documento.add(imagen);      
//    }catch(IOException | DocumentException  e){
//      e.getMessage();
//    }
// 
//    //Declaramos un texto como Paragraph
//    //Le podemos dar formado como alineación, tamaño y color a la fuente.
//    Paragraph parrafo = new Paragraph();
//    parrafo.setAlignment(Paragraph.ALIGN_CENTER);
//    parrafo.setFont(FontFactory.getFont("Sans",20,Font.BOLD));
//    parrafo.add("PDF GENERADO DESDE JAVA");
// 
//    try {
//      //Agregamos el texto al documento
//      documento.add(parrafo);
//    } catch (DocumentException ex) {
//      ex.getMessage();
//    }
// 
//    documento.newPage(); //Podemos agregar una nueva página
//    try {
//     
//      //Agregamos texto al documento
//      documento.add(new Paragraph("Segunda página"));
//    } catch (DocumentException ex) {
//      ex.getMessage();
//    }
 
    documento.close(); //Cerramos el documento
    //writer.close(); //Cerramos writer
    PdfDecoder pdf = null;
    try {  
   
        PrintService service = PrintServiceLookup.lookupDefaultPrintService(); 
        PrinterJob printJob = PrinterJob.getPrinterJob(); 
        printJob.setPrintService(service); 

         Paper paper = new Paper();  
         paper.setSize(595, 842);  
         paper.setImageableArea(0, 0, 595, 842);  

         PageFormat pf = printJob.defaultPage();  
         pf.setPaper(paper);  
 
         pdf = new PdfDecoder(true);  
         pdf.openPdfFile(date);  
         pdf.setPageFormat(pf);  

         printJob.setPageable(pdf);  
         printJob.print();  

     } catch (Exception e) {  

         e.printStackTrace();  

     } finally {  

         pdf.closePdfFile();  
     } 
  }
         
     }

    
